package com.nbcio.im.core.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nbcio.im.core.ImMessage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * IM消息Mapper接口
 *
 * @author nbacheng
 */
@Mapper
public interface ImMessageMapper extends BaseMapper<ImMessage> {
    
    /**
     * 获取私聊消息历史
     *
     * @param userId1 用户1ID
     * @param userId2 用户2ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 消息列表
     */
    List<ImMessage> selectPrivateMessageHistory(@Param("userId1") Long userId1, 
                                               @Param("userId2") Long userId2,
                                               @Param("offset") Integer offset, 
                                               @Param("limit") Integer limit);
    
    /**
     * 获取群组消息历史
     *
     * @param groupId 群组ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 消息列表
     */
    List<ImMessage> selectGroupMessageHistory(@Param("groupId") String groupId,
                                             @Param("offset") Integer offset, 
                                             @Param("limit") Integer limit);
    
    /**
     * 获取未读消息数量
     *
     * @param userId 用户ID
     * @return 未读数量
     */
    Integer selectUnreadCount(@Param("userId") Long userId);
    
    /**
     * 获取与指定用户的未读消息数量
     *
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @return 未读数量
     */
    Integer selectUnreadCountByUser(@Param("userId") Long userId, 
                                   @Param("targetUserId") Long targetUserId);
    
    /**
     * 获取群组未读消息数量
     *
     * @param userId 用户ID
     * @param groupId 群组ID
     * @param joinTime 加入时间
     * @return 未读数量
     */
    Integer selectGroupUnreadCount(@Param("userId") Long userId, 
                                  @Param("groupId") String groupId,
                                  @Param("joinTime") String joinTime);
}
